#include <ros/ros.h>
#include <geometry_msgs/Twist.h>//用于消息发布 消息的类型


//-------------------这是你的回调函数---------------------
void cmdCallback(geometry_msgs::Twist cmdMsg)//注意这个消息类型，需要与发布者保持一致
{
    std::cout<<"vel_x=="<<cmdMsg.linear.x<<std::endl;
}
int main(int argc,char **argv)
{
    ros::init(argc,argv,"example");
    ros::NodeHandle nh;
    //-----------------消息发布----------------------------------//
    ros::Publisher pub_cmd= nh.advertise<geometry_msgs::Twist>("myd_cmd_vel",10);
    //                                    消息格式(速度类型的)     消息的名称 消息的大小

    //--------------------消息订阅-------------------------------//
    ros::Subscriber sub_cmd=nh.subscribe("myd_cmd_vel",10,cmdCallback);
    //                                    接受的消息名称 缓存大小  回调函数名称
 
    ros::Rate rate(10);//设置ros循环周期为10HZ,即他的休眠频率为10HZ
    while(ros::ok())
    {
        std::cout<<"halo!"<<std::endl;
        geometry_msgs::Twist cmd_vel;
        cmd_vel.linear.x=10;//存储消息数据
        pub_cmd.publish(cmd_vel);//发布消息
        rate.sleep();//之前设定周期为10HZ，该休眠函数会让一个循环的执行补足到0.1s后才执行第二次


        //回调函数的执行需要相应的语句
        //如果在循环体中处理
        ros::spinOnce();

        //如果在无循环状态下进行处理
        //ros::spin();//该语句会一直等待执行回调函数，delay_portmax
    }
    
    return 0;
}
